package edu.ues21.tcs.ecommerce2011.mvc.dao;

import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import edu.ues21.tcs.ecommerce2011.mvc.model.Articulo;
import edu.ues21.tcs.ecommerce2011.mvc.model.ArticuloPrecio;
import edu.ues21.tcs.ecommerce2011.mvc.model.ListaPrecio;
/**
*
* @author eandre fmantaras
*/
@Transactional
public class ArticuloPrecioDAOImpl implements ArticuloPrecioDAO {

	// Declaro el hibernate template.iberna
	private HibernateTemplate hibernateTemplate;

	// Le seteo el sessionFactory que le inyecto al hibernateTemplate.
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
		// this.sessionFactory = sessionFactory;
		// this.hibernateTemplate.setSessionFactory(sessionFactory);
	}

	public void save(Integer listaPrecio, Integer idArticulo, float precio) {
		
		ArticuloPrecio ap = new ArticuloPrecio();
		ap.setArticulo((Articulo) hibernateTemplate.get(Articulo.class, idArticulo));
		ap.setPrecio(precio);
		ap.setLista((ListaPrecio) hibernateTemplate.get(ListaPrecio.class, listaPrecio));
    	hibernateTemplate.merge(ap);

	}

	public void edit(float precio, Integer idArticuloPrecio) {

		ArticuloPrecio articulo = (ArticuloPrecio) hibernateTemplate.get(ArticuloPrecio.class, idArticuloPrecio);
		
		articulo.setPrecio(precio);
    	hibernateTemplate.update(articulo);

	}

	public void delete(Integer articuloPrecio) {

		ArticuloPrecio articuloP = (ArticuloPrecio) hibernateTemplate.load(ArticuloPrecio.class,
				articuloPrecio);
		// Elimino el articulo de la tabla Articulo.
		hibernateTemplate.delete(articuloP);
    }

	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<ArticuloPrecio> getAll() {

		return hibernateTemplate.find("from ArticuloPrecio");
	}

	
	@SuppressWarnings("unchecked")
	@Transactional(readOnly = true)
	public List<ArticuloPrecio> getAllLista(Integer idListaPrecio) {
		
		return hibernateTemplate.find("from ArticuloPrecio where listaprecio=" + idListaPrecio);
	//	return hibernateTemplate.find("from ArticuloPrecio",idListaPrecio);
	}
	
	@Transactional(readOnly = true)
	public ArticuloPrecio getArticuloPrecio(Integer id) {

		return hibernateTemplate.get(ArticuloPrecio.class, id);
	}

	@Transactional(readOnly = true)
	public ArticuloPrecio getArticuloPrecio(int articulo, int lista) {
		List<ArticuloPrecio> articuloprecios = this.getAll();
		ArticuloPrecio ap = new ArticuloPrecio();
		for(ArticuloPrecio a:articuloprecios){
			if ((a.getArticulo().getIdarticulo() == articulo)& (a.getLista().getIdListaPrecio() == lista)){
	            ap = a;
	    		return ap;
			}
        }
		return null;
	}
}
